package com.cheng.example.book.advise151.chap1;

/**
 * 建议6：覆写变长方法也循规蹈矩 　
 *
 *
 * 覆写方法不能缩小访问权限；
 * 参数列表必须与被覆写方法相同；
 * 返回类型必须与被重写方法的相同；
 * 重写方法不能抛出新的异常，或者超出父类范围的异常，但是可以抛出更少，更有限的异常，或者不抛出异常。
 *
 *
 * 注意点：
 * 覆写的方法参数列表竟然与父类不相同，这违背了覆写的定义，并且会引发莫名其妙的错误。
 * 所以读者在对变长参数进行覆写时，如果要使用次类似的方法，请仔细想想是不是要一定如此。
 */
public class Client06 {
    public static void main(String[] args) {
        // 向上转型
        Base base = new Sub();
        base.fun(100, 50);

        // 不转型,说明这种转型由编译器去完成的
//        Sub sub = new Sub();
//        sub.fun(100, 50);
    }
}

// 基类
class Base {
    void fun(int price, int... discounts) {
        System.out.println("Base......fun");
    }
}

// 子类，覆写父类方法
class Sub extends Base {
    @Override
    void fun(int price, int[] discounts) {
        System.out.println("Sub......fun");
    }
}